package Day18.Inner01;

/**
 * @author HYHwtx
 * @version 1.0
 * @date 2022/2/25 10:28
 */


/**
演示内部类的使用
6.外部其他类-----不能访问-------局部内部类(因为 局部内部类是一个局部变量)
说明：局部内部类是定义在外部类的局部位置，比如方法中，并且有类名

记住：
1.局部内部类定义在方法中/代码块中
2.作用域在方法体或者代码块中
3.本质还是一个类
 */
public class LocalInnerClass {//外部其他类

    public static void main(String[] args) {
        Other other= new Other();
        other.m1();
        System.out.println("Outer的hashcode="+other);
    }
}
class Other{//外部类
    private int n1= 10;//私有属性
    private  void m2(){//私有方法
        System.out.println("other方法");
         }
         public void m1(){//方法
             //1.局部内部类是定义在外部类的局部位置，通常在方法中
             //3.不能添加访问修饰符，但是可以使用final修饰（可以加final，但是不能被继承了）
             //4.作用域：仅仅在定义他的方法或者代码块中
             class  Inner{
                 //局部内部类(本质仍然还是一个类)
                 //2.可以直接访问外部类的所有成员，包含私有的
                 //7.如果外部类和内部类的成员重名的时候，默认遵循就近原则，如果想要访问外部类的成员，使用外部类名.this.成员 去访问
                 //解读：Outer.this本质就是外部类的对象，即哪个对象调用了m1的方法，这个Outer.this就指向了哪个对象
                private  int n1 = 800;
                public void f1(){
                    //5.我们的局部内部类可以直接访问外部类的成员，比如下面的 外部类的n1和m1；
                    System.out.println("n1的值"+n1);
                    m2();
                    //外部的n1
                    System.out.println("外部类的n1"+Other.this.n1);
                    System.out.println("Other.this.hashcode="+Other.this);

                }
             }
             //6.外部类在方法中可以创建Inner对象，然后调用方法即可
             Inner inner =new Inner();
             inner.f1();
         }

}